unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, Menus; {, Registry, Windows;}

type
  security = record
    archivo : boolean;
    mantenimiento_datos : boolean;
    stock : boolean;
    servicios : boolean;
    facturacion : boolean;
    fiscal : boolean;
    administracion : boolean;
    ver_ventas : boolean;
end;

type

  { TForm1 }

  TForm1 = class(TForm)
    CheckGroup1: TCheckGroup;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    OpenDialog1: TOpenDialog;
    procedure FormShow(Sender: TObject);
    procedure MenuItem3Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure MenuItem5Click(Sender: TObject);
    procedure MenuItem6Click(Sender: TObject);
    {function GetRegistryData(RootKey: HKEY; Key, Value: string): variant;}
  private
    secfile : string;
    segfile : file of security;
    seguridad : security;
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation

{$R *.lfm}

{ TForm1 }

{function TForm1.GetRegistryData(RootKey: HKEY; Key, Value: string): variant;
var
  Reg : TRegistry;
  RegDataType : TRegDataType;
  DataSize, Len : integer;
  s: string;

label cantread;

begin
  Reg := nil;
  try
    Reg := TRegistry.Create(KEY_QUERY_VALUE);
    Reg.RootKey := RootKey;
    if Reg.OpenKeyReadOnly(Key) then begin
      try
        RegDataType := Reg.GetDataType(Value);
        if (RegDataType = rdString) or
           (RegDataType = rdExpandString) then
          Result := Reg.ReadString(Value)
        else if RegDataType = rdInteger then
          Result := Reg.ReadInteger(Value)
        else if RegDataType = rdBinary then begin
          DataSize := Reg.GetDataSize(Value);
          if DataSize = -1 then goto cantread;
          SetLength(s, DataSize);
          Len := Reg.ReadBinaryData(Value, PChar(s)^, DataSize);
          if Len <> DataSize then goto cantread;
          Result := s;
        end else
cantread:
          raise Exception.Create(SysErrorMessage(ERROR_CANTREAD));
      except
        s := ''; // Deallocates memory if allocated
        Reg.CloseKey;
        raise;
      end;
      Reg.CloseKey;
    end else
      raise Exception.Create(SysErrorMessage(GetLastError));
  except
    Reg.Free;
    raise;
  end;
  Reg.Free;
end;}

procedure TForm1.MenuItem6Click(Sender: TObject);
begin
  ShowMessage('SIGECO Security Manager V1.0.0');
end;

procedure TForm1.FormShow(Sender: TObject);
var
  i : integer;

begin
  for i := 0 to 7 do
    CheckGroup1.Checked[i] := False;

  {secfile := GetRegistryData(HKEY_LOCAL_MACHINE, 'SOFTWARE\EIPSistemas\SIGECO', 'InstallDir') + '\security.dat';

  if FileExists(secfile) = True then
  begin
    AssignFile(segfile, secfile);
    Reset(segfile);
    Read(segfile, seguridad);
    CloseFile(segfile);
  end;
  }
  CheckGroup1.Checked[0] := seguridad.archivo;
  CheckGroup1.Checked[1] := seguridad.mantenimiento_datos;
  CheckGroup1.Checked[2] := seguridad.stock;
  CheckGroup1.Checked[3] := seguridad.servicios;
  CheckGroup1.Checked[4] := seguridad.facturacion;
  CheckGroup1.Checked[5] := seguridad.ver_ventas;
  CheckGroup1.Checked[6] := seguridad.fiscal;
  CheckGroup1.Checked[7] := seguridad.administracion;
end;

procedure TForm1.MenuItem3Click(Sender: TObject);
begin
  OpenDialog1.Execute;
  secfile := OpenDialog1.FileName;

  if FileExists(secfile) = True then
  begin
    AssignFile(segfile, secfile);
    Reset(segfile);
    Read(segfile, seguridad);
    CloseFile(segfile);
  end;

  CheckGroup1.Checked[0] := seguridad.archivo;
  CheckGroup1.Checked[1] := seguridad.mantenimiento_datos;
  CheckGroup1.Checked[2] := seguridad.stock;
  CheckGroup1.Checked[3] := seguridad.servicios;
  CheckGroup1.Checked[4] := seguridad.facturacion;
  CheckGroup1.Checked[5] := seguridad.ver_ventas;
  CheckGroup1.Checked[6] := seguridad.fiscal;
  CheckGroup1.Checked[7] := seguridad.administracion;
end;

procedure TForm1.MenuItem4Click(Sender: TObject);
begin
  seguridad.archivo := CheckGroup1.Checked[0];
  seguridad.mantenimiento_datos := CheckGroup1.Checked[1];
  seguridad.stock := CheckGroup1.Checked[2];
  seguridad.servicios := CheckGroup1.Checked[3];
  seguridad.facturacion := CheckGroup1.Checked[4];
  seguridad.ver_ventas := CheckGroup1.Checked[5];
  seguridad.fiscal := CheckGroup1.Checked[6];
  seguridad.administracion := CheckGroup1.Checked[7];

  AssignFile(segfile, secfile);
  Rewrite(segfile);
  Write(segfile, seguridad);
  CloseFile(segfile);

  ShowMessage('Seguridad configurada correctamente');
end;

procedure TForm1.MenuItem5Click(Sender: TObject);
begin
  Close;
end;

end.

